package com.zjdiepu.www.security.sign;

import java.util.Map;

/**
 * 验证签名正确性<br>
 * 签名生成：通过客户端与服务端约定的key以及加密算法对内容字符进行加密生成。<br>
 * 验证方式：在服务端获取签名，使用客户端与服务端约定的key以及加密算法对内容进行加密，
 * 对比加密得到的字符与原签名字符是否一致，一致则验证成功，不一致则验证失败。<br>
 * <p>
 * 注意：客户端提交请求时不需要提交key
 *
 * @author xiongxiaotun
 */
public interface ISign {
	/**
	 * 验证签名正确性
	 *
	 * @param obj
	 * @param sign
	 * @param key
	 * @param secretKey 秘钥/盐值
     * @param signName 签名属性名/map key名称 private String signName;
     * @param signCovenantKey 签名字符串key signKey=XXXX
	 * @return
	 */
	boolean verifySign(Object obj, String sign, String key, String secretKey, String signName, String signCovenantKey);

    /**
     * 验证签名正确性
     *
     * @param paramMap 参与签名的参数
     * @param sign  签名字符串
     * @param key      签名所用key
     * @param secretKey 秘钥/盐值
     * @param signCovenantKey 签名字符串key signKey=XXXX
     * @return
     */
    public boolean verifySign(Map<String, Object> paramMap, String sign, String key, String secretKey, String signCovenantKey);


    /**
     * 返回签名
     * @param obj
     * @param signKey
     * @param secretKey 秘钥/盐值
     * @param signName 签名属性名/map key名称 private String signName;
     * @param signCovenantKey 签名字符串key signKey=XXXX
     * @param isRsaResp rsa响应签名
     * @return
     */
    String generateSign(Object obj, String signKey, String secretKey, String signName, String signCovenantKey, boolean isRsaResp);
    
    /**
     * 返回签名
     *
     * @param map 参与签名的参数
     * @param signKey 签名所用key
     * @param secretKey 秘钥/盐值
     * @param signCovenantKey 签名字符串key signKey=XXXX
     * @param isRsaResp rsa响应签名
     * @return
     */
    String generateSign(Map<String, Object> map, String signKey, String secretKey, String signCovenantKey, boolean isRsaResp);


}
